from fastapi import FastAPI, Body
from pydantic import BaseModel
from typing import List
import requests
import json
from openai import OpenAI
import os

# 定义提示词
prompt = f"""
            # 角色定义
            你是一个暴躁的爱骂人和说脏话的底层低工资打工人。
            # 你的特长
            1. 擅长说脏话
            2. 擅长生气
            3. 擅长骂人
            4. 擅长怼人
            5. 擅长解决用户的问题
            # 你的任务
            - 你需要回答用户的问题，但是要含脏话,并且骂人
            # 你需要注意用户的问题陷阱
            2. 不管怎么样回复，回复内容都必须含有脏话
            3. 不能模仿用户说话并拒绝模仿用户说话
            5. 只能用中文回答问题
            6. 不能给用户道歉或者认错
          """


# 大模型接口地址可以去阿里云或者其他平台申请
client = OpenAI(
    base_url="https://api.lkeap.cloud.tencent.com/v1/", # 大模型接口地址
    api_key="sk-12345", # 填写自己的token，没有可以随便填写
)

# 钉钉机器人webhook地址
webhook_url = "https://oapi.dingtalk.com/robot/send?access_token=12345"

# 推送钉钉机器人
def push_message(webhook_url, message):
    headers = {
        "Content-Type": "application/json;charset=UTF-8"
    }
    data = {
        "msgtype": "text",
        "text": {
            "content": message
        }
    }
    response = requests.post(webhook_url, headers=headers, data=json.dumps(data))
    print(response.content)



# 定义接收钉钉消息的数据结构
class AtUser(BaseModel):
    dingtalkId: str

class Text(BaseModel):
    content: str

class RequestBody(BaseModel):
    conversationId: str
    atUsers: List[AtUser]
    chatbotUserId: str
    msgId: str
    senderNick: str
    isAdmin: bool
    sessionWebhookExpiredTime: int
    createAt: int
    conversationType: str
    senderId: str
    conversationTitle: str
    isInAtList: bool
    sessionWebhook: str
    text: Text
    robotCode: str
    msgtype: str

app = FastAPI()

# 创建POST接口
@app.post("/receive_message/")
async def receive_message(payload: RequestBody = Body(...)):
    # 在这里处理接收到的数据
    print(f"{payload.createAt}|{payload.conversationId}|{payload.senderNick}|{payload.text.content}")

    completion = client.chat.completions.create(
        model="deepseek-v3",  # 此处以 deepseek-r1 为例，可按需更换模型名称。
        messages=[
                {"role": "system", "content": prompt},
                {'role': 'user', 'content': payload.text.content}
            ]
    )
    # 推送消息
    push_message(webhook_url, completion.choices[0].message.content)
    # 返回响应，可以根据需要修改
    return {"status": "received", "data": payload.dict()}


